// 指针运算

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
	int* p = arr;    // 数组名：数组首元素地址

	{
		printf("arr = %p\n", arr);
		printf("&arr[0] = %p\n", &arr[0]);
		printf("p = %p\n", p);
	}
	// 指针加上一个整数
	{
		printf("p + 1 = %p\n", p + 1);
		char* p2 = (char *)p;
		printf("p2 + 1 = %p\n", p2 + 1);
	}
	// 指针减上一个整数
	{
		printf("p + 1 = %p\n", p - 1);
		char* p2 = (char *)p;
		printf("p2 + 1 = %p\n", p2 - 1);
	}
	// 指针 指针 关系运算
	{
		p = &arr[0];
		int* p2 = &arr[0];
		if (p < p2)
			printf("%d\n", 1);
		else if (p == p2)
			printf("%d\n", 0);
		else
			printf("%d\n", -1);
	}
	// 指针 - 指针 = 指针和指针之间的绝对值 = 指针和指针之间的元素个数
	// 不是所有的指针都能相减，指向同一块空间的指针才能相减，（有意义）
	{
		//char * p2 = (char *) & arr[5];
		//char* p = (char*)arr;
		//printf("d\n", p2 - p);     //  (p2的地址 - p1的地址) / sizeof(char) = 20 
		{
			int a = 10;
			int b = 12;
			int* pa = &a, * pb = &b;
			printf("%d\n", pb - pa);

			int* pc;
			// printf("%p\n", pc);
		}
		int* p2 = &arr[5];
		printf("%d\n", p2 - p);
	}

    // 指针+指针 无意义
    
	return 0;
}